package bintree.leetcode;

/**
 * @Author: yuisama
 * @Date: 2021/9/9 14:00
 * @Description:根据二叉树创建字符串
 * https://leetcode-cn.com/problems/construct-string-from-binary-tree/
 */
public class Num606_Tree2Str {
    /**
     * 括号省略的注意事项:
     * a.如果一个树左右树都为空，左右树的()都省略
     * b.如果一个树左树不空，右树空，右树的()可以省略
     * c.如果一个树左树空，右树不空，左树的()不可以省略
     * @param root 二叉树的根节点
     * @return 二叉树转换后的字符串
     */

    public String tree2str(TreeNode root) {
        if (root == null)
            return "";
        StringBuilder sb = new StringBuilder();
        tree2Str(root,sb);
        return sb.toString();
    }

    private void tree2Str(TreeNode root,StringBuilder sb) {
        if (root == null)
            return;
        // 先处理根节点
        sb.append(root.val);
        // 先处理左树，左树不为空
        if (root.left != null) {
            sb.append("(");
            tree2Str(root.left,sb);
            sb.append(")");
        }else {
            // 左树空，右树不空
            if (root.right != null) {
                sb.append("()");
            }
        }
        // 再处理右树
        if (root.right != null) {
            sb.append("(");
            tree2Str(root.right,sb);
            sb.append(")");
        }
    }
}
